#ifndef APPLYFRIEND_H
#define APPLYFRIEND_H

#include "friendlabel.h"
#include "userdata.h"
#include "clickedlabel.h"


#include <QDialog>


namespace Ui {
class ApplyFriend;
}


// 添加好友的申请界面类
class ApplyFriend : public QDialog
{
    Q_OBJECT

public:
    explicit ApplyFriend(QWidget *parent = nullptr);
    ~ApplyFriend();
    
    void initTipLbs();
    void addTipLbs(ClickedLabel*, QPoint cur_point, QPoint &next_point, int text_width, int text_height);
    
    void setSearchInfo(std::shared_ptr<SearchInfo> sinfo);
    
protected:
    bool eventFilter(QObject *obj, QEvent *event) override;
    
private:
    // 重新排列好友标签编辑栏的标签
    void resetLabels();
    void addLabel(QString name);
    
private slots:
    // 显示更多的标签
    void showMoreLabel();
    // 输入label，按下回车触发，将标签加入到展示栏
    void SlotLabelEnter();
    // 点击关闭，移除展示栏中的好友便签
    void SlotRemoveFriendLabel(QString name);
    // 通过点击tip实现增加和删除好友的便签
    void SlotChangeFriendLabelByTip(QString lb_text, ClickLbState state);
    // 输入框文本变换显示不同提示
    void SlotLabelTextChange(const QString& text);
    // 在输入框的输入已完成
    void SlotLabelEditFinished();
    // 输入标签显示提示框，点击提示框内容后添加好友便签
    void SlotAddFriendLabelByClickTip(QString text);
    // 处理确定添加好友的回调
    void SlotApplySure();
    // 处理取消的回调
    void SlotApplyCancel();

private:
    Ui::ApplyFriend *ui;
    // 已经被创建好的标签
    QMap<QString, ClickedLabel*> m_add_labels;
    QVector<QString> m_add_label_keys;
    QPoint m_label_point; //
    // 用来在输入框中显示添加新好友的标签
    QMap<QString, FriendLabel*> m_friend_labels;
    QVector<QString> m_friend_label_keys;
    QVector<QString> m_tip_data;
    QPoint m_tip_cur_point; // 便签提示点的坐标
    std::shared_ptr<SearchInfo> m_sinfo;
};

#endif // APPLYFRIEND_H
